Extensión de Quarto® surveydown
Encuentro 10
La mayoría de las plataformas de encuestas (por ejemplo, Google Forms, etc.) utilizan interfaces que no son reproducibles y muchas requieren una licencia paga para su uso.
El paquete {surveydown} fue diseñado para abordar estos problemas. Basado en una integración entre Quarto/Markdown y Shiny, se puede alojar en línea haciendo que sea fácil reproducir, compartir y controlar la versión de la encuesta.
Los datos recopilados se pueden almacenar en una base de datos Postgres separada (recomendamos Supabase por ser gratuito y de código abierto).
El paquete {surveydown} tiene su sitio oficial en https://surveydown.org// y se instala desde CRAN:
Ejecutando en consola install.packages("surveydown") o desde el panel Packages de RStudio.
La última versión de CRAN es la 0.5.1 y la alojada en su sitio de desarrollo 0.7.1
La versión de desarrollo se puede instalar ejecutando:
El paquete tiene una función que a partir de una plantilla nos ayuda a cear el proyecto de encuesta facilmente. - ver Template
En https://surveydown.org/demos hay algunos demos para visualizar.
Para comenzar debemos tener instalado R + RStudio + Quarto + paquete surveydown.
Luego podemos usar la función surveydown::sd_create_survey("path/to/folder") para construir un proyecto inicial a partir de la plantilla.
Nota
Cada encuesta creada con {surveydown} debe estar en su propia carpeta de proyecto separada.
Por ejemplo, si ejecutamos surveydown::sd_create_survey("Encuesta_prueba") estaremos creando la carpeta Encuesta_prueba
Un proyecto básico de surveydown consiste en tres archivos:
Rproj propio de cualquier proyecto de RStudiosurvey.qmd: Un documento Quarto que contiene el contenido de la encuesta (páginas, preguntas, etc.), que se convierte en un archivo HTML.app.R: Un script R que define una aplicación Shiny que contiene la configuración global (bibliotecas, configuración de la base de datos, etc.) y las opciones de configuración del servidor (por ejemplo, omisión/visualización condicional, etc.).Como todo archivo Quarto tendrá su cabecera YAML y su cuerpo desarrollado en markdown/Quarto con inserciones de código R.
La cabecera tiene que definir su salida como HTML y opcionalmente se puede agregar configuraciones estéticas y otras opciones.
En el cuerpo del archivo Quarto se declaran los componentes de la encuesta y se definen las páginas.
Las páginas se añaden con:
La función para agregar preguntas es sd:question() que tiene varios argumentos que cambian según el tipo de pregunta.
Existen 12 formas distintas (ver Tipos de pregunta )
El componente shiny es el encargado de configurar las opciones de servidor y la lógica de control condicional de la encuesta.
Se agrega código dentro del apartado server() del archivo app.R.
Las funciones principales para el control condicional son:
sd_skip_if(): salto condicional
sd_show_if(): muestra/oculta según condición
El paquete {surveydown} está diseñado para funcionar con cualquier base de datos PostgreSQL.
Los desarrolladores del paquete recomiendan usar Supabase, que es un servicio de base de datos PostgreSQL gratuito y de código abierto.
Antes de iniciar con la primera encuesta hay que realizar tres pasos con Supabase:
Ingresando al sitio de Supabase pulsamos sobre el botón Start your project.
En la siguiente pagina hay que loguearse. Podemos hacerlo automáticamente con una cuenta de github o crear una nueva cuenta en el sitio (con email y password).
Luego creamos nuestra organización, con el nombre, el tipo de uso (Personal, educacional, etc) y el plan (gratuito $ 0 por mes). Finalmente pulsamos sobre Create organization.
En la página siguiente se define el proyecto de base de datos. A partir de declarar su nombre, la contraseña y la región (para Sudamérica usamos el servidor de San Pablo - Brasil)
Junto con el password de la base de datos, necesitamos copiar las credenciales y parámetros de conexión para incluirlos en el proyecto de Quarto + Shiny.
Los parámetros de conexión los conseguimos pulsando sobre el botón Project Settings del menú lateral izquierdo y luego en Configuration -> Database.
Las credenciales copiadas debemos declararlas en el archivo app.R donde se define sel sevidor shiny.
Pegamos los primeros 4 parámetros de tu página de Supabase en sd_database() (“host”, “dbname”, “port” y “user”). La contraseña debe definirse en sd_set_password() en la consola de R (No en en el archivo app.R)
El parámetro table puede ser cualquier nombre que deseemos para denominar a la tabla creada.
Definimos el ejemplo de Encuesta_prueba, al que conviene incorporar el argumento ignore = TRUE, mientras editamos la encuesta localmente y de esta forma evitar que se conecte. En su lugar, se creará un archivo local preview_data.csv en la carpeta de proyecto para poder obtener una vista previa de los datos de la encuesta.
Nota
Un proyecto de Supabase puede admitir varias encuestas de Surveydown, pero se recomienda tener solo una encuesta por proyecto para evitar posibles errores.
Para ejecutar y renderizar la encuesta debemos pulsar el botón Run App del shiny (no renderizar el archivo .qmd como hacemos habitualmente en Quarto) o ejecutamos en consola la función runApp().
La función para crear preguntas es sd_question() y tiene tres argumentos:
id: identificador único para la pregunta, que se utilizará como nombre de la variable en los datos de la encuesta resultante.
label: etiqueta que se mostrará en la pregunta en la encuesta.
type: tipo de pregunta.
Existen 12 tipos diferentes de preguntas:
El server acepta otras configaciones generales, como:
Definir página inicio
Auto scroll de la encuesta
Traducción del sistema a otros idiomas (botones predeterminados)
Activar la calificación de preguntas
Agregar página de administración
Además se pueden incorporar otras funcionalidades a la encuesta:
Preguntas obligatorias
Reactividad (interactividad aprovechando shiny)
Aleatorización de preguntas
Recursos externos (imágenes, etc)
Redireccionamiento externo (links web)
Las encuestas se pueden implementar en servidores que soporten shiny, como por ejemplo shinyapps.io. También se pueden utilizar Posit Connect Cloud, Hugging Face y Heroku.
El sitio oficial donde se encuentra la documentación del paquete describe detalladamente los paso a paso para publicar en shinyapps.io y enlaces externos para los otros servidores mencionados.
El ejemplo mostrado en las diapositivas, se encuentra en:
Instituto Nacional de Epidemiología